package arrays;

import java.util.Arrays;

public class BubbleSort {
    public static void main(String[] args) {
        int[] array = { 2, 5,4, 3, 8, 6, 1, 10, 9};
        bubbleSort(array); // 调用冒泡排序方法
        System.out.println(Arrays.toString(array)); // 输出排序后的数组
    }


    //  冒泡排序实现（升序）
    //  时间复杂度：O(n²)（最坏和平均情况）
    //  空间复杂度：O(1)（原地排序）
    //  稳定性：稳定排序（相等元素的相对位置不变）
    //  @param array 待排序数组

    public static void bubbleSort(int[] array) {
        int n = array.length;

        // 外层循环：控制排序的轮数，共 n-1 轮
        // 原因：第 i 轮会将第 i 大的元素移动到正确位置，因此需要 n-1 轮
        boolean swapped = false;
        for (int i = 0; i < n - 1; i++) {
            // 内层循环：每轮遍历未排序的部分，进行相邻元素比较和交换
            // 范围：从索引 0 到 n-1-i（因为第 i 轮后，最后 i 个元素已有序）
            for (int j = 0; j < n - 1 - i; j++) {
                // 比较相邻元素，若逆序则交换（升序：左元素 > 右元素）
                if (array[j] > array[j + 1]) {
                    // 交换逻辑（使用临时变量 temp）
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    // 标记是否发生交换，若没有发生交换，则说明数组已经有序，可以提前结束外层循环
                    swapped = true;
                }
            }
            // 提前结束外层循环
            if (!swapped) break;
        }
    }
}